package com.wrial.kind.doublepointer;
/*
 * @Author  Wrial
 * @Date Created in 10:58 2020/8/21
 * @Description  区间列表的交集
 * 给定两个由一些 闭区间 组成的列表，每个区间列表都是成对不相交的，并且已经排序。
    返回这两个区间列表的交集。
输入：A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
输出：[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
 */

import java.util.ArrayList;
import java.util.List;

public class IntervalIntersection {
    /**
     * A和B都是有序的，找不A和B相交的部分
     * 双指针idA指向A   idB指向B 然后交叉比较
     *
     */
    public int[][] intervalIntersection(int[][] A, int[][] B) {
        if (A.length == 0 || B.length == 0) return new int[0][0];
        List<int[]> ansList = new ArrayList<>();
        int idA = 0, idB = 0;
        while (idA < A.length && idB < B.length) {
            int maxLeft = Math.max(A[idA][0], B[idB][0]);
            int minRight = Math.min(A[idA][1], B[idB][1]);
            if (maxLeft <= minRight) {
                ansList.add(new int[]{maxLeft, minRight});
            }
            if (A[idA][1] < B[idB][1]) {
                idA++;
            }else {
                idB++;
            }
        }
        int[][] ans = new int[ansList.size()][];
        for (int i = 0; i < ansList.size(); i++) {
            ans[i] = ansList.get(i);
        }
        return ans;
    }

}
